#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
日志工具模块
"""

import os
import logging
import datetime
from logging.handlers import RotatingFileHandler

def setup_logger(log_dir, level=logging.INFO, max_size_mb=10, backup_count=5):
    """
    设置应用程序日志系统
    
    Args:
        log_dir (str): 日志文件存储目录
        level (int): 日志级别
        max_size_mb (int): 单个日志文件最大大小（MB）
        backup_count (int): 保留的日志文件数量
        
    Returns:
        logging.Logger: 配置好的日志器
    """
    if not os.path.exists(log_dir):
        os.makedirs(log_dir, exist_ok=True)
        
    # 创建日志器
    logger = logging.getLogger('vision_trainer')
    logger.setLevel(level)
    
    # 避免重复添加处理器
    if logger.handlers:
        return logger
    
    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(level)
    
    # 创建文件处理器 - 使用当前日期作为文件名
    today = datetime.datetime.now().strftime('%Y-%m-%d')
    log_file = os.path.join(log_dir, f'app_{today}.log')
    
    file_handler = RotatingFileHandler(
        log_file, 
        maxBytes=max_size_mb * 1024 * 1024,
        backupCount=backup_count,
        encoding='utf-8'
    )
    file_handler.setLevel(level)
    
    # 创建格式器
    formatter = logging.Formatter(
        '[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)d] - %(message)s'
    )
    
    # 设置格式器
    console_handler.setFormatter(formatter)
    file_handler.setFormatter(formatter)
    
    # 添加处理器
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)
    
    return logger 